package realdance.swing.outline;

import java.awt.BorderLayout;
import java.awt.Dialog;
import java.awt.Dialog.ModalityType;
import java.awt.EventQueue;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JDialog;
import javax.swing.JMenuBar;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JButton;
import javax.swing.JOptionPane;

/* JDialog
 * JDialog는 대화상자를 나타냄
 * 이것을 이용해서 메세지를 표시하거나
 * 사용자 입력을 받을 수 있음
 * 대화상자는 modal 또는 MODELESS 일 수 있음
 * modal : 대화상자가 표시된 후 다른 프레임의
 * 		    사용자 입력을 차단함
 * 		     즉, MODAL 상자를 닫기 전까지는
 * 		    다른 Frame 은 선택하기 어려움
 * 		  
 * MODELESS : 사용자의 입력을 막지 않는 대화상자
 * 			    특정 Frame 을 선택하더라도
 * 		   다른 Frame 이 화면에서 사라지지 않음
 *  		
 *  Frame 의 일부로 대화상자를 제어하려면
 *  JDialog 생성자에 JFrame 객체를 
 *  매개변수로 넘겨야 함
 *  이런 경우 Frame 이 파괴되면
 *  대화상자도 같이 닫힘
 *  
 *  Modality Type
 *  대화상자의 모달속성을 좀 더 세밀하게 제어함
 *  모달 대화상자를 표시할때 사용자의 입력을
 *  어느 범위까지 거부 blocking 할것인지 여부 지정
 *  
 *  MODELESS : 단순히 부모 Frame 의 제어를 받는
 *  		      대화상자. 사용자의 입력을 받음
 *  
 *  DOCUMENT_MODAL : 모달 대화상자
 *  		단순히 현재 창만을 대상으로
 *  		사용자 입력을 거부함
 *  
 *  APPLICATION_MODAL : 모달 대화상자
 *  		광범위하게 전체 창을 대상으로
 *  		      사용자 입력을 거부함
 */

public class J11_HelloSwingDialog extends JFrame {

	private JPanel contentPane;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					J11_HelloSwingDialog frame = new J11_HelloSwingDialog();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public J11_HelloSwingDialog() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 450, 300);
		
		JMenuBar menuBar = new JMenuBar();
		setJMenuBar(menuBar);
		
		JMenu mnFile = new JMenu("File");
		menuBar.add(mnFile);
		
		JMenuItem mntmExit = new JMenuItem("exit");
		mnFile.add(mntmExit);
		
		JMenu mnHelp = new JMenu("Help");
		menuBar.add(mnHelp);
		
		JMenuItem mntmProjectInfo = new JMenuItem("project info");
		mntmProjectInfo.addActionListener(new MenuActionListener(this));
		
		mnHelp.add(mntmProjectInfo);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		contentPane.setLayout(new BorderLayout(0, 0));
		setContentPane(contentPane);
	}

}

class MenuActionListener implements ActionListener{

	private JFrame p = null;
	public MenuActionListener(JFrame p) {
		this.p = p;
	}
	@Override
	public void actionPerformed(ActionEvent e) {
		//new SwingDialog(p);
		JDialog d = new JDialog(p, Dialog.ModalityType.DOCUMENT_MODAL);
		//Dialog.ModalityType.MODELESS
		//Dialog.ModalityType.DOCUMENT_MODAL
		//Dialog.ModalityType.APPLICATION_MODAL
		//
		d.setSize(250, 250);
		d.setVisible(true);
		
	}
	
}

class SwingDialog extends JDialog{
	public SwingDialog(JFrame parent){
		super(parent, false);	// 부모창과 모달창 여부
		setBounds(300,300,250,120);
		setTitle("Project About");
		setVisible(true);
		setModal(false); // 모달창 여부
		setModalityType(DEFAULT_MODALITY_TYPE);
		
	}
}